
using namespace std;

struct NoCopy {
    // 使用 = delete 来通知编译器，不希望定义这些成员
    NoCopy() = default;     // 使用合成的默认构造函数
    NoCopy(const NoCopy&) = delete;              // 阻止拷贝
    NoCopy& operator=(const NoCopy&) = delete;   // 阻止赋值
    ~NoCopy() = default;    // 使用合成的析构函数
};

struct NoDtor {
    NoDtor() = default;     // 使用合成的默认构造函数
    ~NoDtor() = delete;     // 不能销毁 NoDtor 类型的对象
};

int main()
{
    // NoDtor nd; // 错误：NoDtor 的析构函数是删除的
    NoDtor *p = new NoDtor(); // 正确：但不能 delete p
    // delete p;  // 错误：NoDtor 的析构函数是删除的
}